<?php
/**
 *分页类 具体还没有验证
 *author network
 */
class Page {  
    // 分页栏每页显示的页数  
    public $rollPage = 6;  
    // 页数跳转时要带的参数  
    public $parameter  ;  
    // 默认列表每页显示行数  
    public $listRows = 20;  
    // 起始行数  
    public $firstRow    ;  
    // 分页总页面数  
    protected $totalPages  ;  
    // 总行数  
    protected $totalRows  ;  
    // 当前页数  
    protected $nowPage    ;  
    // 分页的栏的总页数  
    protected $coolPages   ;  
    // 分页显示定制  
    protected $config  = array(  
        'redirect'=>false,  
        'header'=>'条记录',  
        'prev'=>'上一页',  
        'next'=>'下一页',  
        'first'=>'1',  
        'last'=>'最后一页',  
        'theme'=>' <div class="part1">%upPage% %first%  %prePage%  %linkPage%  %nextPage% %downPage%</div> <div class="part2">共  %totalPage% 页');  
    // 默认分页变量名  
    protected $varPage;  
  
    /** 
     * 架构函数 
     * @access public 
     * @param array $totalRows  总的记录数 
     * @param array $listRows  每页显示记录数 
     * @param array $parameter  分页跳转的参数 
     */  
    public function __construct($totalRows,$listRows='',$parameter='') {  
        $this->totalRows = $totalRows;  
        $this->parameter = $parameter;  
        $this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;  
        if(!empty($listRows)) {  
            $this->listRows = intval($listRows);  
        }  
        $this->totalPages = ceil($this->totalRows/$this->listRows);     //总页数  
        $this->coolPages  = ceil($this->totalPages/$this->rollPage);  
        //$_GET验证  
        $this->nowPage = intval($_GET[$this->varPage]);  
        $this->nowPage = $this->nowPage > 0 ? $this->nowPage : 1;  
          
        if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {  
            $this->nowPage = $this->totalPages;  
        }  
        $this->firstRow = $this->listRows*($this->nowPage-1);  
    }  
  
    public function setConfig($name,$value) {  
        if(isset($this->config[$name])) {  
            $this->config[$name]    =   $value;  
        }  
    }  
  
    /** 
     * 分页显示输出 
     * @access public 
     */  
    public function show() {  
          
        if(0 == $this->totalRows) return '';  
          
        //处理参数  
        $p = $this->varPage;  
        $url  =  $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;  
        $parse = parse_url($url);  
        if(isset($parse['query'])) {  
            parse_str($parse['query'],$params);  
            unset($params[$p]);  
            $url   =  $parse['path'].'?'.http_build_query($params);  
        }  
          
        /* 分页逻辑  */         
          
        //当总数小于显示的页码数  
        if ($this->totalPages <= $this->rollPage) {  
            $start = 1;  
            $end   = $this->totalPages;  
        }  
        else{  
            //  
            if  ($this->nowPage <= $this->rollPage - 1) {  
                $start = 1;  
                $end   = $this->rollPage;  
                  
                $islast = true;  
            }    
            else if ($this->nowPage > $this->totalPages - $this->rollPage + 1) {  
                $start = $this->totalPages - ($this->rollPage - 1);  
                $end   = $this->totalPages;  
                  
                $isfirst = true;  
            }  
            else{  
                //浮动数  
                $size = floor($this->rollPage / 2);  
                  
                $start = $this->nowPage - $size;  
                $end   = $this->nowPage + $size;  
                  
                $isfirst = true;  
                $islast = true;  
            }  
        }  
          
        //上下翻页字符串  
        $upRow   = $this->nowPage - 1;  
        $downRow = $this->nowPage + 1;  
          
          
        /* 拼装HTML */  
          
        //< 1...     ...last >  
        if ($isfirst){  
            $theFirst = "<a class='firstPage' href='".$url."&".$p."=1' >".$this->config['first']."</a>";  
        }  
        if ($islast){  
            $theEnd = "<a class='lastPage' href='".$url."&".$p."=$this->totalPages' >".$this->config['last']."</a>";  
        }  
          
        if ($upRow > 0){  
            $upPage = "<a class='upPage' href='".$url."&".$p."=$upRow'>".$this->config['prev']."</a>";  
        }  
          
        if ($downRow <= $this->totalPages){  
            $downPage = "<a class='downPage' href='".$url."&".$p."=$downRow'>".$this->config['next']."</a>";  
        }  
          
       if($start==3){  
            $linkPage .= "<a href='".$url."&".$p."=2'>2</a>";  
        }  
        if($start>=4){  
            $linkPage .= "<a href='".$url."&".$p."=2'>2</a> <span class='noEndClass'>...</span>";  
        }  
        //1 2 3 4 5  
        for($i=$start;$i<=$end;$i++){  
            if($i!=$this->nowPage){  
                $linkPage .= " <a href='".$url."&".$p."=$i'> ".$i." </a>";  
            }else{  
                $linkPage .= " <span class='current'>".$i."</span>";  
            }  
            if($i==$end){  
                if($i<$this->totalRows){  
                    $linkPage .= " <span class='noEndClass'>...</span>";  
                }  
            }  
        }  
                  
        $pageStr = str_replace(  
            array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%first%','%prePage%','%linkPage%','%nextPage%','%downPage%','%end%'),  
            array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$theFirst,$prePage,$linkPage,$nextPage,$downPage,$theEnd),$this->config['theme']);  
  
        //显示模式  普通false 带跳转ture  
        if (!empty($this->config['redirect'])){  
            $html = $pageStr;  
          
        }else{  
            //传递参数  
            if($this->totalPages > 1){  
                $redirect = " 到第 <form method='get' action=''><input name=".$p." type='text' class='page_text' size='3' maxlength='3' value='" . $this->nowPage ."'/> 页 <input type='submit' class='page_btn' value='确定' />";  
                if ($params){  
                    foreach($params as $k => $v){  
                        $string .= "<input type='hidden' name='" . $k . "' value='" . $v . "'/>";  
                    }  
                    $redirect = $redirect . $string . '</form></div>';  
                }else{  
                    $redirect = $redirect . '</form></div>';  
                }  
            }  
            //生成Html字符串  
            $html = $pageStr . $redirect;         
        }    
        return $html;  
    }  
  
} 